// import { createApp, inject } from 'vue'

// const EventBusSymbol = Symbol()

// const EventBus = {
//   install(app) {
//     const eventBus = createApp({})
//     app.provide(EventBusSymbol, eventBus)
//   },

//   useEventBus() {
//     const eventBus = inject(EventBusSymbol)
//     if (!eventBus) {
//       throw new Error('Event Bus not found')
//     }
//     return eventBus
//   }
// }

// export default EventBus


// bus.js
class EventBus {
	constructor() {
		this.event=Object.create(null);
	}
	// 订阅
	$on(name, fn) {
		if(!this.event[name]){
      //一个事件可能有多个监听者
      this.event[name]=[];
    };
    this.event[name].push(fn);
	}
	// 发布
	$emit(name,...args){
    //给回调函数传参
    this.event[name]&&this.event[name].forEach(fn => {
      fn(...args)
    });
  }
  //只被触发一次的事件
  $once(name,fn){
    //在这里同时完成了对该事件的注册、对该事件的触发，并在最后并取消该事件。
    const cb=(...args)=>{
      //触发
      fn.apply(this,args);
      //取消
      this.off(name,fn);
    };
    //监听
    this.on(name,cb);
  }
	// 取消订阅
	$off(name,offcb){
    if(this.event[name]){
      let index=this.event[name].findIndex((fn)=>{
        return offcb===fn;
      })
      this.event[name].splice(index,1);
      if(!this.event[name].length){
        delete this.event[name];
      }
    }
  }
}
export default new EventBus;
